﻿using RuoVea.ExDto;
using RuoVea.ExEnum;
using RuoVea.ExSugar.Dto;
using System.ComponentModel.DataAnnotations;

namespace RuoVea.OmiApi.Dict.Service.Dto;

/// <summary>
/// 字典值查询参数 - 用于字典值分页查询和条件筛选
/// </summary>
public class SysDictValueParam : PageParam
{
    /// <summary>
    /// 字典类型Id - 关联SysDictType表的主键，用于按类型筛选
    /// </summary>
    public long TypeId { get; set; }

    /// <summary>
    /// 值 - 字典项的实际值，支持模糊查询
    /// 支持数据类型：文本、数字、颜色代码、图片标识等
    /// </summary>
    public string Value { get; set; }

    /// <summary>
    /// 编码 - 字典项的唯一编码标识，用于程序识别，支持模糊查询
    /// </summary>
    public string Code { get; set; }

    /// <summary>
    /// 状态 - 筛选条件：0=正常(启用)，1=停用(禁用)
    /// </summary>
    public int? IsDisable { get; set; }
}

/// <summary>
/// 字典值数据传输对象 - 用于前后端字典值数据的传输和交互
/// </summary>
public class SysDictValueDto
{
    /// <summary>
    /// 主键Id - 字典值的唯一标识
    /// </summary>
    public long? Id { get; set; }

    /// <summary>
    /// SysDictType表的编码 - 字典类型的唯一编码标识
    /// </summary>
    public string TypeCode { get; set; }
    /// <summary>
    /// 创建时间 - 记录创建时间戳
    /// </summary>
    public DateTime? CreateTime { get; set; }

    /// <summary>
    /// 创建人 - 创建者的用户ID
    /// </summary>
    public long? Creator { get; set; }

    /// <summary>
    /// 修改时间 - 最后修改时间戳
    /// </summary>
    public DateTime? ModifyTime { get; set; }

    /// <summary>
    /// 修改人 - 最后修改者的用户ID
    /// </summary>
    public long? Modifier { get; set; }

    /// <summary>
    /// 逻辑删除标识 - 0=未删除，1=已删除，默认值：0
    /// </summary>
    public int? Deleted { get; set; }

    /// <summary>
    /// 字典类型Id - 关联SysDictType表的主键，标识所属字典类型
    /// </summary>
    public long TypeId { get; set; }

    /// <summary>
    /// 显示文本 - 字典项的显示名称，用于界面展示
    /// </summary>
    public string Label { get; set; }

    /// <summary>
    /// 显示样式-标签类型 - 控制前端显示样式，支持以下类型：
    /// text:文本 | badge:徽章 | tag:标签 | button:按钮 | status:状态指示
    /// progress:进度条 | image:图片 | json:JSON数据 | html:HTML内容
    /// </summary>
    public string TagType { get; set; }

    /// <summary>
    /// 值 - 字典项的实际值，最大长度100字符
    /// 存储简短标识：文本值、数字、颜色代码、图片短路径等
    /// 对于长数据请使用ExtData字段扩展
    /// </summary>
    [MaxLength(256)]
    public string Value { get; set; }

    /// <summary>
    /// 编码 - 字典项的唯一编码标识，用于程序识别，最大长度50字符
    /// 格式建议：类型编码_序号，如：HOME_CAROUSEL_1
    /// </summary>
    [MaxLength(256)]
    public string Code { get; set; }

    /// <summary>
    /// 排序 - 显示顺序，数值越小越靠前，默认值：10
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 备注 - 字典项的详细描述信息，最大长度100字符
    /// </summary>
    public string Remark { get; set; }

    /// <summary>
    /// 状态 - 0=正常(启用)，1=停用(禁用)，默认值：0
    /// </summary>
    public int IsDisable { get; set; } = 0;

    /// <summary>
    /// 是否默认值 - 标识是否为该类型的默认选项
    /// true:默认值，false:非默认值
    /// </summary>
    public bool IsDefault { get; set; }

    /// <summary>
    /// 显示样式-Class - CSS类名，用于控制显示样式
    /// 示例："el-tag el-tag--success", "avatar avatar-lg"
    /// </summary>
    [MaxLength(512)]
    public string ClassSetting { get; set; }

    /// <summary>
    /// 显示样式-Style - 内联样式，用于控制显示样式
    /// 示例："color: red; font-size: 14px", "width: 100px; height: 100px"
    /// </summary>
    [MaxLength(512)]
    public string StyleSetting { get; set; }

    /// <summary>
    /// 拓展数据 - JSON格式的扩展配置数据，用于存储复杂结构
    /// 支持存储：长URL、复杂配置对象、数组数据、长文本内容等
    /// 示例：{"imageUrl":"长URL","linkUrl":"/path","target":"_blank"}
    /// </summary>
    public string ExtData { get; set; }
}

/// <summary>
/// 字典值状态修改输入参数 - 用于修改字典值的启用/禁用状态
/// </summary>
public class ChageStateDictValueInput : EntityBaseIdDto
{
    /// <summary>
    /// 状态 - YesOrNot.N=正常(启用)，YesOrNot.Y=停用(禁用)
    /// </summary>
    public YesOrNot IsDisable { get; set; }
}